package DAO;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.StringTokenizer;

import jdbc.Connexion;

import businessEntities.Cours;
import businessEntities.DateCours;

public class DaoCours {
	
	/**
	 * Retrieve stock values for the given date and the given isin code 
	 * @param isin
	 * @param debut
	 * @param fin
	 * @return
	 */
	public static ArrayList<Cours> getCours(String isin, Date debut, Date fin){
		
		String sql = "SELECT " +
				"datecours, " +
				"isin, " +
				"valeurouverture, " +
				"valeurfermeture, " +
				"valeurhaut, " +
				"valeurbas, " +
				"volume " +
				"FROM " +
				"cours " +
				"WHERE " +
				"isin = '"+isin+"' ";
		if(debut!=null)
			//sql+=" AND to_date(datecours,'DD/MM/YY') >= to_date('"+DateCours.getDate(debut, DateCours.FORMAT_DD_MM_YYYY)+"','DD/MM/YYYY') ";
			sql+=" AND to_date(datecours,'DD/MM/YY') between to_date('"+DateCours.getDate(debut, DateCours.FORMAT_DD_MM_YYYY)+"','DD/MM/YYYY') and sysdate ";
		if(fin!=null)
			sql+=" AND to_date(datecours,'DD/MM/YY') <= to_date('"+DateCours.getDate(fin, DateCours.FORMAT_DD_MM_YYYY)+"','DD/MM/YYYY') ";
		sql+=" ORDER BY datecours asc";	
		
		List<Object[]> lOCours = Connexion.executeSql(sql, 7);
		ArrayList<Cours> lCours = new ArrayList<Cours>();
		for(Object[] oCours : lOCours){
			Cours cours = new Cours();
			Date date = DateCours.getDate(oCours[0]+"", DateCours.FORMAT_YYYYY_MM_DD_TIRE);
			
			cours.setDateCours(date);
			cours.setIsin(oCours[1]+"");
			cours.setOuverture(((BigDecimal)oCours[2]).doubleValue());
			cours.setFermeture(((BigDecimal)oCours[3]).doubleValue());
			cours.setHaut(((BigDecimal)oCours[4]).doubleValue());
			cours.setBas(((BigDecimal)oCours[5]).doubleValue());
			
			lCours.add(cours);
		}
		
		
		
		return lCours;
	}
	
	/**
	 * Insert stock values for a given isin and a date
	 * @param isin
	 * @param dateCours
	 * @param valeurOuverture
	 * @param valeurHaut
	 * @param valeurBas
	 * @param valeurFermeture
	 * @param volume
	 */
	public static void insertCours(String isin,String dateCours,String valeurOuverture, String valeurHaut, String valeurBas, String valeurFermeture, String volume){
		
		String sql = "INSERT INTO COURS" +
					"(ISIN, DATECOURS, VALEUROUVERTURE, VALEURHAUT, VALEURBAS, VALEURFERMETURE, VOLUME) "+
					"VALUES ('"+isin+"','"+dateCours+"','"+valeurOuverture+"', '"+valeurHaut+"', '"+valeurBas+"', '"+valeurFermeture+"', '"+volume+"')";
			Connexion.executeSql(sql, 1);
	}
		
	/**
	 * 
	 * @param String s
	 * Parse string csv and insert in database.
	 */
	public static void insertDatas (String s){
		StringTokenizer sT = new StringTokenizer(s, ";", false);
		String isin=sT.nextToken();
		String dateCours=sT.nextToken();
		String valeurOuverture=sT.nextToken().replace(".", ",");
		String valeurHaut=sT.nextToken().replace(".", ",");
		String valeurBas=sT.nextToken().replace(".", ",");
		String valeurFermeture=sT.nextToken().replace(".", ",");
		String volume=sT.nextToken();
		insertCours(isin, dateCours, valeurOuverture, valeurHaut, valeurBas, valeurFermeture, volume);
	}
	
}
